<!DOCTYPE html>
<html lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <title>New Page</title>
      <style>
        body { font: 15px / 1.4 Tahoma; }
        @media (prefers-color-scheme: dark) {
          body { background: #333; color: white; }
        }
        td { padding-left: 10px; padding-right: 10px; min-width: auto; }
        td:first-child { text-align: right; }
        tr:nth-child(odd) { background-color: #88888820 }
        tr:nth-child(even) { background-color: #88888830; }
        tr:hover { background-color: #88888810; }
      </style>
  </head>
  <body>
    <h1><strong>Keyboard Shortcut CheatSheet（macOS）</strong></h1>
    <div>This article describes keyboard shortcuts used as of vChewing 3.7.3 release.</div>
    <div>Please use mouse wheel to scroll this page.</div>
    <div>This article uses certain macOS keyboard symbols to simplify the description. Note:</div>
    <ol>
      <li>The names of BackSpace and Delete keys conform to Windows and Linux standard。</li>
      <li>The names of arrow keys are redefined according to the text writing direction.</li>
      <li>The verb "shang4-ping2 (上屏)" used in Simplified Chinese is replaced by its standard term "commit".</li>
      <li>vChewing don't handle (real) numpad inputs (numbers and math symbols from there) except that the candidate window is shown up and number / math symbol keys are used as candidate keys.</li>
      <li>The "number keys" referred by this article only indicate those number keys in the main keyboard area.</li>
      <li>The term "ICB" is short for "inline composition buffer" which is also called "pre-edit area" by the Text Service Framework in Microsoft Windows.</li>
      <li>The term "PCB" is short for "phonabet combination buffer" and is operated by the Tekkon composer. It appears in ICB when user is typing phonabets. The input method retrieve combined reading keys from PCB, checking whether it is valid (having record in the dictionary), and put valid results into the Megrez compositor. The entire ICB appears as a facade in front of Megrez and Tekkon.</li>
      <li>vChewing doesn't use Zonble's term "before" & "after" since they are extremely misleading. We use "front/rear (back, tail)" & "forward / backward" which refers to the typing direction.</li>
      <li>The term"symbol menu state" only refers to the categorized symbol menu.</li>
    </ol>
    <div>&nbsp;</div>
    <table>
      <tr>
        <td>
          <div><strong>Symbols</strong></div>
        </td>
        <td>
          <div><strong>Mac Keyboard</strong></div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌘</div>
        </td>
        <td>
          <div>CMD (Command / Windows / Super)</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌥</div>
        </td>
        <td>
          <div>Alt (Option)</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌃</div>
        </td>
        <td>
          <div>Ctrl (Control)</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇧</div>
        </td>
        <td>
          <div>Shift</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇪</div>
        </td>
        <td>
          <div>Caps (Caps Lock)</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌫</div>
        </td>
        <td>
          <div>Bksp (Backspace. Apple calls it "Delete")</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌦</div>
        </td>
        <td>
          <div>Del (This is the real "Delete")</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⎋</div>
        </td>
        <td>
          <div>Esc (Escape)</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>␣</div>
        </td>
        <td>
          <div>Space</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇥</div>
        </td>
        <td>
          <div>Tab</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⏎</div>
        </td>
        <td>
          <div>Return (Combined with Enter ⌤ key)</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>↑</div>
        </td>
        <td>
          <div>Left-hand key: Up when horizontal typing, Right when vertical typing.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>↓</div>
        </td>
        <td>
          <div>Right-hand key: Down when horizontal typing, Left when vertical typing.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>←</div>
        </td>
        <td>
          <div>Backward key: Left when horizontal typing, Up when vertical typing.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>→</div>
        </td>
        <td>
          <div>Forward key: Right when horizontal typing, Down when vertical typing.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>↖︎</div>
        </td>
        <td>
          <div>Home</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>↘︎</div>
        </td>
        <td>
          <div>End</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇞</div>
        </td>
        <td>
          <div>PgUp (Page Up)</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇟</div>
        </td>
        <td>
          <div>PgDn (Page Down)</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>☰</div>
        </td>
        <td>
          <div>Context Menu Key (PC Keyboard Only)</div>
        </td>
      </tr>
    </table>
    <div>&nbsp;</div>
    <div>These shortcuts are for toggling certain function modes. You can disable these shortcuts in vChewing Preferences.</div>
    <table>
      <tr>
        <td>
          <div><strong>Shortcuts</strong></div>
        </td>
        <td>
          <div><strong>Function Modes</strong></div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌃⇧⌘ P</div>
        </td>
        <td>
          <div>Per-character selection mode (i.e. SCPC mode).</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌃⇧⌘ K</div>
        </td>
        <td>
          <div>Kang-Xi conversion mode.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌃⇧⌘ A</div>
        </td>
        <td>
          <div>Associated phrases mode (only usable in SCPC mode).</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌃⇧⌘ J</div>
        </td>
        <td>
          <div>JIS conversion mode.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌃⇧⌘ L</div>
        </td>
        <td>
          <div>CNS11643 all-char mode.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌃⇧⌘ H</div>
        </td>
        <td>
          <div>Half-width punctuation mode.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌃⇧⌘ M</div>
        </td>
        <td>
          <div>Currency numeral output. This converts "一二" to "壹貳".</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌃⇧⌘ I</div>
        </td>
        <td>
          <div>CIN cassette mode.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌃⇧⌘ D</div>
        </td>
        <td>
          <div>CHS / CHT Input Mode Switch</div>
        </td>
      </tr>
    </table>
    <div>&nbsp;</div>
    <div>These shortcuts are available for serving basic typing functions.</div>
    <table>
      <tr>
        <td>
          <div><strong>Shortcuts</strong></div>
        </td>
        <td>
          <div><strong>Functions</strong></div>
        </td>
        <td>
          <div><strong>Notes</strong></div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⏎</div>
        </td>
        <td>
          <div>‧ Commit everything in the inline composition buffer.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty and the IME is not in marking state.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇧⏎</div>
        </td>
        <td>
          <div>‧ Commit everything first, then attempt to call associated phrases using the front node data.</div>
        </td>
        <td>
          <div>This won't work with SPCP mode which calls associated phrases in a different way.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌥⇧⏎</div>
        </td>
        <td>
          <div>‧ Commit everything in the inline composition buffer with all chars separated by an ASCII space.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌥→</div>
          <div>⌥←</div>
        </td>
        <td>
          <div>‧ Push cursor forward by node.</div>
          <div>‧ Pull cursor back by node.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>JIS Eisu</div>
        </td>
        <td>
          <div>‧ Toggling Alphanumerical Input Mode.</div>
        </td>
        <td>
          <div>Only JIS keyboard has this key.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇧↑</div>
          <div>⇧↓</div>
        </td>
        <td>
          <div>‧ Revolve candidates clockwise.</div>
          <div>‧ Revolve candidates counter-clockwise.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌃⌘]</div>
          <div>⌃⌘[</div>
        </td>
        <td>
          <div>‧ Revolve candidates clockwise.</div>
          <div>‧ Revolve candidates counter-clockwise.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>☰</div>
          <div>⇧☰</div>
        </td>
        <td>
          <div>‧ Revolve candidates clockwise.</div>
          <div>‧ Revolve candidates counter-clockwise.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌥↑</div>
          <div>⌥↓</div>
        </td>
        <td>
          <div>‧ Revolve candidates clockwise.</div>
          <div>‧ Revolve candidates counter-clockwise.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇧␣</div>
          <div>⇧⌘␣</div>
        </td>
        <td>
          <div>‧ Revolve candidates clockwise.</div>
          <div>‧ Revolve candidates counter-clockwise.</div>
        </td>
        <td>
          <div>The same as above, but optimized for single-hand operation. You can swipe your thumb from left ⌘ to ␣ key.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇥</div>
          <div>⇧⇥</div>
        </td>
        <td>
          <div>‧ Revolve candidates clockwise.</div>
          <div>‧ Revolve candidates counter-clockwise.</div>
          <div>## Has compatibility issues with Facebook. ##</div>
        </td>
        <td>
          <div>The same as above by default, can be changed for calling candidate window (in vChewing Preferences).</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌥⌃→</div>
          <div>⌥⌃←</div>
        </td>
        <td>
          <div>‧ Push cursor to the front edge of the ICB.</div>
          <div>‧ Pull cursor to the tail of the ICB.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>↘︎</div>
          <div>↖︎</div>
        </td>
        <td>
          <div>‧ Push cursor to the front edge of the ICB.</div>
          <div>‧ Pull cursor to the tail of the ICB.</div>
        </td>
        <td>
          <div>As above.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇧→</div>
          <div>⇧←</div>
        </td>
        <td>
          <div>Control the marking range in the ICB.</div>
          <div>After that, you can do further operations prompted on the screen.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty.</div>
          <div>When there are things marked, the input method turns into Marking State.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⏎</div>
        </td>
        <td>
          <div>Dump the marked range (reading-phrase pair) into user dictionary. If the pair already exists, this operation will boost its score weight.</div>
        </td>
        <td>
          <div>Only works in marking state.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇧⌘⏎</div>
        </td>
        <td>
          <div>Nerf the marked existing reading-phrase pair with a negative score of -114.514.</div>
        </td>
        <td>
          <div>Only works in marking state.</div>
          <div>Not effective with user associated phrases.</div>
          <div>Nerfed weight (score) is saved in user dictionary.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌫</div>
          <div>⌦</div>
        </td>
        <td>
          <div>Dump the marked existing reading-phrase pair into the user phrase filter list. vChewing omits all pairs "on the list" when querying candidates from dictionary.</div>
        </td>
        <td>
          <div>Only works in marking state.</div>
          <div>Not effective with user associated phrases.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇧⌦</div>
        </td>
        <td>
          <div>Clear the entire ICB.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty and the IME is not in marking state.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇧⌫</div>
        </td>
        <td>
          <div>Disassembly the previous reading (i.e. the reading at the rear of the cursor) and remove its intonation. Will remove the previous reading if it is not able to be disassembled.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty and the IME is not in marking state. Its behavior can be specified in vChewing Preferences.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>Intonation key</div>
        </td>
        <td>
          <div>Attempt to disassembly the previous reading (i.e. the reading at the rear of the cursor), remove its intonation, and override its intonation with the intonation key pressed. Will insert standalone intonation mark if previous reading doesn't exist or is not able to be disassembled.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty and the IME is not in marking state. Its behavior can be specified in vChewing Preferences.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌃⌥⌘⏎</div>
        </td>
        <td>
          <div>Dump the current ICB to W3C Ruby HTML format. The pronunciations are written in textbook format.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty and the IME is not in marking state. One can specify whether it dumps Hanyu-Pinyin or Phonabets in vChewing Preferences.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌃⌘⏎</div>
        </td>
        <td>
          <div>Dump the current ICB to pronunciation string thread. All intonations are written at last. If Hanyu-Pinyin, intonations are numerals.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty and the IME is not in marking state. One can specify whether it dumps Hanyu-Pinyin or Phonabets.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌃⇧⌘⏎</div>
        </td>
        <td>
          <div>Dump the current ICB to pronunciation string thread. All intonations are written at last. If Hanyu-Pinyin, intonations are numerals.</div>
        </td>
        <td>
          <div>Same to the ⌃⇧⌘⏎ except that all readings are joined with "-" symbol.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇧␣</div>
        </td>
        <td>
          <div>Type full-width space when the ICB is empty.</div>
        </td>
        <td>
          <div>Can be press-and-hold for consecutive inputs.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>Hold ⌥⇧</div>
          <div>and type Number Keys</div>
        </td>
        <td>
          <div>Type full-width Arabic numbers.</div>
        </td>
        <td>
          <div>will output half-width Arabic numbers instead if the IME is in half-width punctuation mode.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>Hold ⌥</div>
          <div>and type Number Keys</div>
        </td>
        <td>
          <div>Type half-width Arabic numbers.</div>
        </td>
        <td>
        </td>
      </tr>
      <tr>
        <td>
          <div>～</div>
        </td>
        <td>
          <div>Categorized symbol menu. It can be customized by creating your own "symbols.dat" file in libchewing symbol format and save it into your user dictionary folder.</div>
        </td>
        <td>
          <div>JIS keyboards have to use the "_" key (to the left of your right-hand ⇧ key) instead since it doesn't have "～" key.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌥ ～</div>
        </td>
        <td>
          <div>Tap once to switch to code point input;<br />Tap once again to switch to Hanin keyboard symbol input.</div>
        </td>
        <td>
          <div>These inputs can be turned off by pressing Enter / Esc / Delete.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌥⇧ ～</div>
        </td>
        <td>
          <div>Non-categorized symbol menu, customizable in user phrases.</div>
        </td>
        <td>
          <div>JIS keyboards have to use the "_" key (to the left of your right-hand ⇧ key) instead since it doesn't have "～" key.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇞</div>
          <div>⇟</div>
        </td>
        <td>
          <div>Call candidate window.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty.</div>
          <div>Candidate window automatically appears in SCPC mode.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>␣</div>
        </td>
        <td>
          <div>Call candidate window.</div>
        </td>
        <td>
          <div>As above but can be disabled in vChewing Preferences.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⎋</div>
        </td>
        <td>
          <div>Clear the entire ICB if not in marking state.</div>
          <div>Quit the marking state if in the marking state.</div>
        </td>
        <td>
          <div>Its behavior (when not in marking state) can be disabled in vChewing Preferences. If so, it will only clear the unfinished pronunciation in the PCB.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>Left⇧</div>
          <div>Right⇧</div>
        </td>
        <td>
          <div>Toggle alphanumerical input mode.</div>
        </td>
        <td>
          <div>Can be disabled in vChewing Preferences.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌥⌦</div>
          <div>⌥⌫</div>
        </td>
        <td>
          <div>Perform Delete / BackSpace for each phrase node.<br />⌥⌫ Will clean unfinished readings / strokes first.</div>
        </td>
        <td>
          <div>Requiring that ICB is not empty and the IME is not in marking state.</div>
        </td>
      </tr>
    </table>
    <div>&nbsp;</div>
    <div>The following shortcuts are usable when <strong>the default Tadokoro Candidate Window</strong> is shown up:</div>
    <table>
      <tr>
        <td>
          <div><strong>Shortcuts</strong></div>
        </td>
        <td>
          <div><strong>Functions</strong></div>
        </td>
        <td>
          <div><strong>Notes</strong></div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⏎</div>
        </td>
        <td>
          <div>Confirm the highlighted candidate.</div>
        </td>
        <td>
          <div>Can be disabled (in vChewing preferences) for associated phrase candidates.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇧⏎</div>
        </td>
        <td>
          <div>‧ Attempt to call available associated phrases using the highlighted candidate.</div>
          <div>‧ The current ICB with the confirmed highlighted candidate will be committed first.</div>
        </td>
        <td>
          <div>‧ Associates require that the cursor must be situated in the most-front.</div>
          <div>‧ This won't work with SPCP mode which calls associated phrases in a different way.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌃⌘]</div>
          <div>⌃⌘[</div>
        </td>
        <td>
          <div>‧ Highlight the next candidate.</div>
          <div>‧ Highlight the previous candidate.</div>
        </td>
        <td>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇥</div>
          <div>⇧⇥</div>
        </td>
        <td>
          <div>‧ Highlight the next candidate.</div>
          <div>‧ Highlight the previous candidate.</div>
        </td>
        <td>
          <div>Can be redesignated in vChewing Preferences for revolving pages with exception: It only revolves when there's only one page.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>␣</div>
          <div>⇧␣</div>
        </td>
        <td>
          <div>Revolve pages or candidates clockwise, according to its settings in vChewing Preferences.</div>
        </td>
        <td>
          <div>It revolves candidates when there is only one page.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇞</div>
          <div>⇟</div>
        </td>
        <td>
          <div>Flip pages.</div>
        </td>
        <td>
          <div>It revolves candidates when there is only one page.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>↖︎</div>
          <div>↘︎</div>
        </td>
        <td>
          <div>‧ Choose the total first candidate.</div>
          <div>‧ Choose the total last candidate.</div>
        </td>
        <td>
          <div>It buzzes / farts for unnecessary operations.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⎋</div>
          <div>⌫</div>
          <div>⌦</div>
          <div>⇧→</div>
          <div>⇧←</div>
        </td>
        <td>
          <div>Back to the previous symbol menu level. If not available, closes the candidate window.</div>
        </td>
        <td>
          <div>It always closes the candidate window if is not in the symbol menu state. ESC key may close Spotlight window.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>Hold ⇧</div>
          <div>and type Candidate Keys</div>
        </td>
        <td>
          <div>Choose designated associated phrase candidate.</div>
        </td>
        <td>
          <div>If the current candidate window is for associated phrases, it will tell you.</div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⌥→</div>
          <div>⌥←</div>
        </td>
        <td>
          <div>Moving the cursor in the ICB by nodes while keeping the candidate window open.</div>
        </td>
        <td>
          <div></div>
        </td>
      </tr>
      <tr>
        <td>
          <div>⇧⌥→</div>
          <div>⇧⌥←</div>
        </td>
        <td>
          <div>oving the cursor in the ICB by span while keeping the candidate window open.</div>
        </td>
        <td>
          <div>If the cursor cuts a character after the movement, the cursor will keep on moving to the edge of the current node.</div>
        </td>
      </tr>
    </table>
    <div>&nbsp;</div>
    <div>$ EOF.</div>
  </body>
</html>
